<?php

use think\Db;
use org\myTemplate;
/**
 * 获取分类所有子分类
 *
 * @param int $cid 分类ID
 *
 * @return array|bool
 */
function get_category_children ($cid){
    if(empty($cid)){
        return false;
    }

    $children = Db::name('category')->where(['path' => ['like',"%,{$cid},%"]])->select();

    return array2tree($children);
}

/**
 * 根据分类ID获取文章列表（包括子分类）
 *
 * @param int   $cid   分类ID
 * @param int   $limit 显示条数
 * @param array $where 查询条件
 * @param array $order 排序
 * @param array $filed 查询字段
 *
 * @return bool|false|PDOStatement|string|\think\Collection
 */
function get_articles_by_cid ($cid,$limit = 10,$where = [],$order = [],$filed = []){
    if(empty($cid)){
        return false;
    }

    $ids = Db::name('category')->where(['path' => ['like',"%,{$cid},%"]])->column('id');
    $ids = (!empty($ids) && is_array($ids)) ? implode(',',$ids).','.$cid : $cid;

    $fileds = array_merge(['id','cid','title','introduction','thumb','reading','publish_time'],(array)$filed);
    $map = array_merge(['cid' => ['IN',$ids],'status' => 1,
        'publish_time' => ['<= time',date('Y-m-d H:i:s')]],(array)$where);
    $sort = array_merge(['is_top' => 'DESC','sort' => 'DESC','publish_time' => 'DESC'],(array)$order);

    $article_list = Db::name('article')->where($map)->field($fileds)->order($sort)->limit($limit)->select();

    return $article_list;
}

/**
 * 根据分类ID获取文章列表，带分页（包括子分类）
 *
 * @param int   $cid       分类ID
 * @param int   $page_size 每页显示条数
 * @param array $where     查询条件
 * @param array $order     排序
 * @param array $filed     查询字段
 *
 * @return bool|\think\paginator\Collection
 */
function get_articles_by_cid_paged ($cid,$page_size = 15,$where = [],$order = [],$filed = []){
    if(empty($cid)){
        return false;
    }

    $ids = Db::name('category')->where(['path' => ['like',"%,{$cid},%"]])->column('id');
    $ids = (!empty($ids) && is_array($ids)) ? implode(',',$ids).','.$cid : $cid;

    $fileds = array_merge(['id','cid','title','introduction','thumb','reading','publish_time'],(array)$filed);
    $map = array_merge(['cid' => ['IN',$ids],'status' => 1,
        'publish_time' => ['<= time',date('Y-m-d H:i:s')]],(array)$where);
    $sort = array_merge(['is_top' => 'DESC','sort' => 'DESC','publish_time' => 'DESC'],(array)$order);

    $article_list = Db::name('article')->where($map)->field($fileds)->order($sort)->paginate($page_size);

    return $article_list;
}

/**
 * 数组层级缩进转换
 *
 * @param array $array 源数组
 * @param int   $pid
 * @param int   $level
 *
 * @return array
 */
function array2level ($array,$pid = 0,$level = 1){
    static $list = [];
    foreach($array as $v){
        if($v['pid'] == $pid){
            $v['level'] = $level;
            $list[] = $v;
            array2level($array,$v['id'],$level + 1);
        }
    }

    return $list;
}

/**
 * 构建层级（树状）数组
 *
 * @param array  $array          要进行处理的一维数组，经过该函数处理后，该数组自动转为树状数组
 * @param string $pid_name       父级ID的字段名
 * @param string $child_key_name 子元素键名
 *
 * @return array|bool
 */
function array2tree (&$array,$pid_name = 'pid',$child_key_name = 'children'){
    $counter = array_children_count($array,$pid_name);
    if(!isset($counter[0]) || $counter[0] == 0){
        return $array;
    }
    $tree = [];
    while(isset($counter[0]) && $counter[0] > 0){
        $temp = array_shift($array);
        if(isset($counter[$temp['id']]) && $counter[$temp['id']] > 0){
            array_push($array,$temp);
        }
        else{
            if($temp[$pid_name] == 0){
                $tree[] = $temp;
            }
            else{
                $array = array_child_append($array,$temp[$pid_name],$temp,$child_key_name);
            }
        }
        $counter = array_children_count($array,$pid_name);
    }

    return $tree;
}

/**
 * 子元素计数器
 *
 * @param array $array
 * @param int   $pid
 *
 * @return array
 */
function array_children_count ($array,$pid){
    $counter = [];
    foreach($array as $item){
        $count = isset($counter[$item[$pid]]) ? $counter[$item[$pid]] : 0;
        $count++;
        $counter[$item[$pid]] = $count;
    }

    return $counter;
}

/**
 * 把元素插入到对应的父元素$child_key_name字段
 *
 * @param        $parent
 * @param        $pid
 * @param        $child
 * @param string $child_key_name 子元素键名
 *
 * @return mixed
 */
function array_child_append ($parent,$pid,$child,$child_key_name){
    foreach($parent as &$item){
        if($item['id'] == $pid){
            if(!isset($item[$child_key_name]))
                $item[$child_key_name] = [];
            $item[$child_key_name][] = $child;
        }
    }

    return $parent;
}

/**
 * 循环删除目录和文件
 *
 * @param string $dir_name
 *
 * @return bool
 */
function delete_dir_file ($dir_name){
    $result = false;
    if(is_dir($dir_name)){
        if($handle = opendir($dir_name)){
            while(false !== ($item = readdir($handle))){
                if($item != '.' && $item != '..'){
                    if(is_dir($dir_name.DS.$item)){
                        delete_dir_file($dir_name.DS.$item);
                    }
                    else{
                        unlink($dir_name.DS.$item);
                    }
                }
            }
            closedir($handle);
            if(rmdir($dir_name)){
                $result = true;
            }
        }
    }

    return $result;
}

/**
 * 判断是否为手机访问
 * @return  boolean
 */
function is_mobile (){
    static $is_mobile;

    if(isset($is_mobile)){
        return $is_mobile;
    }

    if(empty($_SERVER['HTTP_USER_AGENT'])){
        $is_mobile = false;
    }
    else if(strpos($_SERVER['HTTP_USER_AGENT'],'Mobile') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'Android') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'Silk/') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'Kindle') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'BlackBerry') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'Opera Mini') !== false || strpos($_SERVER['HTTP_USER_AGENT'],'Opera Mobi') !== false){
        $is_mobile = true;
    }
    else{
        $is_mobile = false;
    }

    return $is_mobile;
}

/**
 * 手机号格式检查
 *
 * @param string $mobile
 *
 * @return bool
 */
function check_mobile_number ($mobile){
    if(!is_numeric($mobile)){
        return false;
    }
    $reg = '#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,7,8]{1}\d{8}$|^18[\d]{9}$#';

    return preg_match($reg,$mobile) ? true : false;
}

/**
 * 替换定界符进行飘红
 *
 * @param $value
 */
function str_replace_red ($value){
    return str_replace(['{','}'],['<em>','</em>'],$value);
}

/**
 * 按照提供数据获取百度样式
 *
 * @param $data
 *
 * @return mixed
 */
function get_baidu_style($data){
    $Template = new Template();
    $tem_path = "../application/admin/view/baidu/baidu/style".$data['style'];
    return $Template->fetch($tem_path,['data'=>$data]);
}

/**
 * 提供数据获取渲染后的样式代码
 * 
 */
function get_style($data,$type){
    $tem_path = ROOT_PATH . "public/".$type."/".$data['style'].".html";
    if ($type != '' && file_exists($tem_path)) {
        $Template = new myTemplate();
        return $Template->fetch($tem_path,['data'=>$data],[],0);
    }
    return '';
}


/**
 * 将php数组转化成js数组
 *
 * @param $array
 *
 * @return string
 */
function to_js_array ($array){
    $res = '';
    if(is_array($array) && !empty($array)){
        if (count($array)>1) {     
            for($i = 0;$i < count($array);$i++){
                if($i == 0){
                    $res .= "['".$array[$i]."',";
                }
                else if($i == count($array) - 1){
                    $res .= "'".$array[$i]."']";
                }
                else{
                    $res .= "'".$array[$i]."',";
                }
            }
        }else{
            $res = "['".$array[0]."']";
        }  
        return $res;
    }
    return "[]";
    
}


function to_js_array_obj($array){
    $res = '';
    $cnIndex = ['一','二','三','四','五','六','七','八','九','十'];
    if(is_array($array) && !empty($array)){
        $res .= "["; 

            foreach ($array as $key => $value) {
                $res .= "{";
                foreach ($value as $k => $v) {
                    $res .= $k.":'".$v."',";
                    
                }
                $res .= "stitle:'问题".$cnIndex[$key]."',";
                $res .= "slx:'问题".$cnIndex[$key]."分类',";
                $res .= "surl:'问题".$cnIndex[$key]."链接',";
                $res .= "tname:'content[data][".$key."][title]',";
                $res .= "tlx:'content[data][".$key."][lx]',";
                $res .= "turl:'content[data][".$key."][url]',";
                $res .= "},";
            }
        
        $res .="]";
        return $res;
    }
    return "[]";
    
}


function to_js_array_obj_baidu($array){
    $res = '';
    if(is_array($array) && !empty($array)){
        $res .= "["; 

            foreach ($array as $key => $value) {
                $res .= "{";
                foreach ($value as $k => $v) {
                    $res .= $k.":'".$v."',";
                    
                }
                $res .= "},";
            }
        
        $res .="]";
        return $res;
    }
    return "[]";
    
}

function lock($nums,$key='zhouyu')
{
    $length = 9;
    $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";
    $codelen = substr($strbase,0,$length);
    $key = 2543.5415412812;
    $rtn = "";
    $codeext = substr($strbase,$length + 10);
    $numslen = strlen($nums);
    $codenums = substr($strbase,$length,10);
    //密文第一位标记数字的长度
    $begin = substr($codelen,$numslen - 1,1);
    //密文的扩展位
    $extlen = $length - $numslen - 1;
    $temp = str_replace('.', '', $nums / $key);
    $temp = substr($temp,-$extlen);
    $arrextTemp = str_split($codeext);
    $arrext = str_split($temp);
    foreach ($arrext as $v) {
        $rtn .= $arrextTemp[$v];
    }
    $arrnumsTemp = str_split($codenums);
    $arrnums = str_split($nums);
    foreach ($arrnums as $v) {
        $rtn .= $arrnumsTemp[$v];
    }
    return $begin.$rtn;
}
//解密函数
function unlock($code)
{
    $begin = substr($code,0,1);
    $rtn = '';
    $length = 9;
    $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";
    $codelen = substr($strbase,0,$length);
    $len = strpos($codelen,$begin);
    $codenums = substr($strbase,$length,10);
    if($len!== false){
        $len++;
        $arrnums = str_split(substr($code,-$len));
        foreach ($arrnums as $v) {
            $rtn .= strpos($codenums,$v);
        }
    }

    return $rtn;
}


